Skip to content

package: general waybeam encoder package for Infinity6E and Infinity6C - #110

Open
snokvist wants to merge 1 commit into
OpenIPC:masterfrom
snokvist:upstream-pr/waybeam-package
Open

package: general waybeam encoder package for Infinity6E and Infinity6C#110
snokvist wants to merge 1 commit into
OpenIPC:masterfrom
snokvist:upstream-pr/waybeam-package

Conversation

@snokvist

@snokvist snokvist commented Jul 5, 2026

Copy link
Copy Markdown

Adds a Buildroot package waybeam: an H.265 video encoder and streamer for
SigmaStar Infinity6E (SSC338Q/SSC30KQ) and Infinity6C (SSC378QE). The SoC
backend is selected from OPENIPC_SOC_FAMILY. The source is MIT-licensed and
tracks OpenIPC/waybeam_venc master (currently v0.40.1).

Installs:

  • /usr/bin/waybeam
  • /usr/bin/json_cli (config editor)
  • /etc/waybeam.json
  • /etc/init.d/S95waybeam

Unlocked sensor modules (both families). Waybeam ships its own imx335/imx415
drivers with higher-FPS sensor modes:

  • Infinity6E (Star6E): installs the unlocked sensor_imx{335,415}_star6e.ko
    over the stock /lib/modules/4.9.84/sigmastar/sensor_imx*_mipi.ko names
    (up to 144 fps IMX335 / 100 fps IMX415). No custom ISP bins — the SDK/stock
    tuning applies (isp.sensorBin defaults to empty).
  • Infinity6C (Maruko): installs sensor_imx{335,415}_mipi.ko plus the
    matching /etc/sensors/imx335.bin and imx415.bin, since there are no
    in-tree modules for these sensors on I6C.

Both are ordered after sigmastar-osdrv-sensors and the family's
sigmastar-osdrv-infinity6{e,c} so the modules install over the stock ones.

waybeam and Majestic cannot be built together (depends on !BR2_PACKAGE_MAJESTIC): both drive the same sensor and encoder, and the
SigmaStar OSDRV MI libraries are installed to /usr/lib only when Majestic
is not selected. The package ships no libraries; OSDRV provides them.

Defaults in /etc/waybeam.json: UDP RTP output enabled to
udp://192.168.1.10:5600, resolution auto (sensor native), ROI and audio
disabled. isp.sensorBin is empty, which is valid — the encoder falls back
to the SDK default ISP tuning, so video comes up on first boot. The config is
kept in sync with the v0.40.1 schema (carries the attitude section; the dead
frameLost field, removed from the encoder in v0.19.0, was dropped).

Verified with scoped Buildroot builds on both families (Majestic off). Each
uses the Buildroot toolchain; the Infinity6C build installs the binary,
json_cli, both sensor modules, both ISP bins, config and init script:

  • Infinity6E — glibc binary.
  • Infinity6C (SSC378QE) — musl binary.

Verification note for the Star6E sensor modules: they ship prebuilt
(stripped --strip-debug) and must match the target kernel's vermagic. They
were built against the OpenIPC Infinity6E 4.9.84 kernel; a scoped I6E build +
boot check that sensor_imx335_mipi.ko / imx415.ko insmod cleanly and the
new modes enumerate is the remaining gate (the Maruko modules were validated
the same way).

@flyrouter

Copy link
Copy Markdown
Member

Good afternoon.
Thanks for sending the PR.
There are almost no issues with its formatting.
However, in the next few days we will need to clarify a few organisational matters and I will let you know in PM before merging.
Thanks.

Buildroot package building the OpenIPC/waybeam_venc H.265 video encoder
and streamer for SigmaStar Infinity6E (SSC338Q/SSC30KQ) and Infinity6C
(SSC378QE). The SoC backend is selected from OPENIPC_SOC_FAMILY. The
source is MIT-licensed.

Installs /usr/bin/waybeam, /usr/bin/json_cli, /etc/waybeam.json and
/etc/init.d/S95waybeam. On Infinity6C it also installs the encoder's own
imx335/imx415 sensor modules as sensor_imx*_mipi.ko and the matching
imx335.bin/imx415.bin, since there are no in-tree modules for these
sensors; the package is ordered after sigmastar-osdrv-sensors and
sigmastar-osdrv-infinity6c so those modules install over the stock ones.

waybeam and Majestic cannot be built together (depends on
!BR2_PACKAGE_MAJESTIC): both drive the same sensor and encoder, and the
SigmaStar OSDRV MI libraries are installed only when Majestic is not
selected. The package ships no libraries; OSDRV provides them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@snokvist
snokvist force-pushed the upstream-pr/waybeam-package branch from 9b84b52 to f60a355 Compare July 11, 2026 05:17
@snokvist

Copy link
Copy Markdown
Author

I am happy to move this to OpenIPC/firmware PR instead if thats a more suitable place for it. At least one other uses has confirmed this package works for building waybeam.

openipc-ai pushed a commit to OpenIPC/firmware that referenced this pull request Aug 29, 2026
Migrated from OpenIPC/builder#110. waybeam is a standalone H.265 encoder
and streamer for Infinity6E (SSC338Q/SSC30KQ) and Infinity6C (SSC378QE),
selected from OPENIPC_SOC_FAMILY. It serves whole SoC families rather than
one retail model, so it belongs in the shared tree rather than in builder.

Three things changed on the way over, all of them to clear gates this tree
enforces and builder does not:

- The site pointed at OpenIPC/waybeam_venc, since renamed to OpenIPC/waybeam.
- The sensor modules shipped as prebuilt .ko lifted from the source tree,
  which is a binary without a buildable source, and had to match the target
  kernel's vermagic by hand -- the builder PR left an I6E boot check as the
  open gate for exactly that reason. They are now compiled from drivers/*.c
  against the kernel this build just produced, so vermagic cannot drift.
  The SigmaStar headers they need come from the OpenIPC/sensors submodule,
  hence WAYBEAM_GIT_SUBMODULES. The install path follows
  LINUX_VERSION_PROBED rather than a literal 4.9.84 / 5.10.61.
- The Infinity6C ISP tuning bins are not installed. Their own README records
  them as pulled off a running SSC378QE, which is the binary-extracted-from-
  firmware case this tree refuses. isp.sensorBin ships empty, so the encoder
  falls back to SDK default tuning and video still comes up without them.

No mainline defconfig can select this: it depends on !BR2_PACKAGE_MAJESTIC
and every sigmastar board in ALL_BOARDS sets Majestic on, so it is listed in
ci-matrix NOT_BUILT with that reason.
@openipc-ai

Copy link
Copy Markdown
Contributor

This has moved to OpenIPC/firmware — draft PR: OpenIPC/firmware#2332

@snokvist, the package serves whole SoC families rather than one retail model,
so it belongs in the shared tree rather than in builder. Your commit is carried
over unsquashed with you as its author. It's a draft, and your review is what it
is waiting on — I'd have added you through the reviewer field, but GitHub only
accepts review requests from repository collaborators, so this is me asking
directly.

Three things changed on the way over, all to clear gates firmware enforces and
builder doesn't. The first two are worth your attention because they change what
your package does:

The sensor modules are now compiled from source. The prebuilt
sensors/star6e/sensor_imx*_star6e.ko are a binary without a buildable source in
firmware's terms, and they have to be vermagic-matched by hand — which is exactly
why your description lists an I6E insmod check as the remaining gate. Since
drivers/sensor_imx*_{star6e,maruko}.c are real sources, the package now builds
them against the kernel from the same build:

$(MAKE) -C $(@D)/drivers sensor SOC=$(WAYBEAM_SOC) \
        KSRC="$(LINUX_DIR)" CROSS="$(TARGET_CROSS)"

A local ssc338q_lite build (Majestic off) confirms they compile and land with
the right vermagic: vermagic=4.9.84 SMP preempt mod_unload ARMv7 thumb2 p2v8.
That should close your open gate structurally rather than by testing. This needs
WAYBEAM_GIT_SUBMODULES = YES, since the SigmaStar headers come from the
sensors-src/ submodule on OpenIPC/sensors, and the install path follows
LINUX_VERSION_PROBED instead of a literal 4.9.84 / 5.10.61.

The Infinity6C ISP tuning bins are not installed.
iq-profiles/maruko-bin/README records them as pulled from a working SSC378QE
bench /etc/sensors/, and firmware refuses binaries lifted off a running camera.
It should cost nothing: waybeam.json ships isp.sensorBin empty, and
sigmastar-osdrv-sensors already puts imx335.bin and imx415.bin in
/etc/sensors/. If your Maruko bench depends on those specific bins rather
than the stock ones, say so
— that's the change most likely to be wrong, and
you're the only one who can tell.

Third and minor: the site follows the OpenIPC/waybeam_vencOpenIPC/waybeam
rename. WAYBEAM_VERSION stays HEAD, matching the other OpenIPC-org packages
in the tree.

What it still needs is hardware, which is why it's a draft: an SSC338Q or SSC30KQ
and an SSC378QE booting an image with it, confirming the modules insmod
cleanly, the unlocked modes enumerate, and the stream comes up with
isp.sensorBin empty. If you can run that and paste the output on #2332, it can
come out of draft.

openipc-ai pushed a commit to OpenIPC/firmware that referenced this pull request Aug 29, 2026
Migrated from OpenIPC/builder#110. waybeam is a standalone H.265 encoder
and streamer for Infinity6E (SSC338Q/SSC30KQ) and Infinity6C (SSC378QE),
selected from OPENIPC_SOC_FAMILY. It serves whole SoC families rather than
one retail model, so it belongs in the shared tree rather than in builder.

Three things changed on the way over, all of them to clear gates this tree
enforces and builder does not:

- The site pointed at OpenIPC/waybeam_venc, since renamed to OpenIPC/waybeam.
- The sensor modules shipped as prebuilt .ko lifted from the source tree,
  which is a binary without a buildable source, and had to match the target
  kernel's vermagic by hand -- the builder PR left an I6E boot check as the
  open gate for exactly that reason. They are now compiled from drivers/*.c
  against the kernel this build just produced, so vermagic cannot drift.
  The SigmaStar headers they need come from the OpenIPC/sensors submodule,
  hence WAYBEAM_GIT_SUBMODULES. The install path follows
  LINUX_VERSION_PROBED rather than a literal 4.9.84 / 5.10.61.
- The Infinity6C ISP tuning bins are not installed. They were pulled off a
  running SSC378QE, and are byte-identical to this tree's own copies in
  sigmastar-osdrv-infinity6c, so vendoring them round-tripped our files back
  at us. Nothing is lost: with isp.sensorBin empty waybeam resolves
  /etc/sensors/<sensor>.bin itself, the same stock tuning Majestic loads.

No mainline defconfig can select this: it depends on !BR2_PACKAGE_MAJESTIC
and every sigmastar board in ALL_BOARDS sets Majestic on, so it is listed in
ci-matrix NOT_BUILT with that reason.
openipc-ai pushed a commit to OpenIPC/firmware that referenced this pull request Aug 29, 2026
Migrated from OpenIPC/builder#110. waybeam is a standalone H.265 encoder
and streamer for Infinity6E (SSC338Q/SSC30KQ) and Infinity6C (SSC378QE),
selected from OPENIPC_SOC_FAMILY. It serves whole SoC families rather than
one retail model, so it belongs in the shared tree rather than in builder.

Three things changed on the way over, all of them to clear gates this tree
enforces and builder does not:

- The site pointed at OpenIPC/waybeam_venc, since renamed to OpenIPC/waybeam.
- The sensor modules shipped as prebuilt .ko lifted from the source tree,
  which is a binary without a buildable source, and had to match the target
  kernel's vermagic by hand -- the builder PR left an I6E boot check as the
  open gate for exactly that reason. They are now compiled from drivers/*.c
  against the kernel this build just produced, so vermagic cannot drift.
  The SigmaStar headers they need come from the OpenIPC/sensors submodule,
  hence WAYBEAM_GIT_SUBMODULES. The install path follows
  LINUX_VERSION_PROBED rather than a literal 4.9.84 / 5.10.61.
- The Infinity6C ISP tuning bins are not installed. They were pulled off a
  running SSC378QE, and are byte-identical to this tree's own copies in
  sigmastar-osdrv-infinity6c, so vendoring them round-tripped our files back
  at us. Nothing is lost: with isp.sensorBin empty waybeam resolves
  /etc/sensors/<sensor>.bin itself, the same stock tuning Majestic loads.

No mainline defconfig can select this: it depends on !BR2_PACKAGE_MAJESTIC
and every sigmastar board in ALL_BOARDS sets Majestic on, so it is listed in
ci-matrix NOT_BUILT with that reason.
openipc-ai added a commit to OpenIPC/firmware that referenced this pull request Aug 29, 2026
waybeam: add the SigmaStar encoder package

Migrated from OpenIPC/builder#110. waybeam is a standalone H.265 encoder
and streamer for Infinity6E (SSC338Q/SSC30KQ) and Infinity6C (SSC378QE),
selected from OPENIPC_SOC_FAMILY. It serves whole SoC families rather than
one retail model, so it belongs in the shared tree rather than in builder.

Three things changed on the way over, all of them to clear gates this tree
enforces and builder does not:

- The site pointed at OpenIPC/waybeam_venc, since renamed to OpenIPC/waybeam.
- The sensor modules shipped as prebuilt .ko lifted from the source tree,
  which is a binary without a buildable source, and had to match the target
  kernel's vermagic by hand -- the builder PR left an I6E boot check as the
  open gate for exactly that reason. They are now compiled from drivers/*.c
  against the kernel this build just produced, so vermagic cannot drift.
  The SigmaStar headers they need come from the OpenIPC/sensors submodule,
  hence WAYBEAM_GIT_SUBMODULES. The install path follows
  LINUX_VERSION_PROBED rather than a literal 4.9.84 / 5.10.61.
- The Infinity6C ISP tuning bins are not installed. They were pulled off a
  running SSC378QE, and are byte-identical to this tree's own copies in
  sigmastar-osdrv-infinity6c, so vendoring them round-tripped our files back
  at us. Nothing is lost: with isp.sensorBin empty waybeam resolves
  /etc/sensors/<sensor>.bin itself, the same stock tuning Majestic loads.

No mainline defconfig can select this: it depends on !BR2_PACKAGE_MAJESTIC
and every sigmastar board in ALL_BOARDS sets Majestic on, so it is listed in
ci-matrix NOT_BUILT with that reason.

waybeam: offer Infinity6E only, not Infinity6C

Hardware testing on an SSC378QE (#2332) found the encoder
running against MI libraries it was not built for. waybeam's Infinity6C
backend targets the 2024-06-18 SigmaStar MI set; sigmastar-osdrv-infinity6c
installs 2022-09-07. The pipeline streams on those, but AE never actuates and
the frame is black -- mean luma 2.05/255 measured through the encoder's own
snapshot endpoint, against 153.91 with the 2024 libraries, everything else
held constant.

So the package's claim to need no libraries of its own holds only where the
revision OSDRV ships is one the backend targets. On Infinity6E it is; on
Infinity6C it is not, and a package that builds, installs and streams black
is worse than one that is not offered. Config.in drops the I6C dependency and
says why, and the unreachable maruko branch comes out of the .mk with the
measurement recorded so it is not rediscovered from scratch.

Reconciling the two revisions belongs in sigmastar-osdrv-infinity6c, where
bumping the MI libraries affects every I6C board -- majestic links them too --
and needs evidence of its own. I6C returns here once they agree.

Verified: ssc338q_lite with Majestic off still builds -- waybeam and json_cli
install, sensor_imx335_mipi.ko lands at /lib/modules/4.9.84/sigmastar with the
kernel's vermagic, rootfs 5180KB/8192KB.

waybeam: stop reporting a failed stop as success

wait_exit() fell out of its loop with a warning and no failing status, and
stop() printed OK regardless, so `restart` ran start() against a process that
had not died. start()'s own duplicate-instance guard then found it still
running, printed "already running" and returned 0 -- a requested restart that
silently never happened, which is exactly the failure mode the three-name
matching in this script exists to avoid.

wait_exit() now returns 1 on timeout. stop() escalates to SIGKILL once, and
only claims OK when nothing is left; restart is `stop && start`. Found by the
Qodo review on #2332.

Co-authored-by: snokvist <joakim.snokvist@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants